@param info: domain info from xen
@return: deferred
"""
- config = sxp.child_value(savedinfo, 'config')
- deferred = XendDomainInfo.vm_recreate(config, info)
+ deferred = XendDomainInfo.vm_recreate(savedinfo, info)
def fn(dominfo):
self.domain[dominfo.id] = dominfo
deferred.addCallback(fn)
id = str(d['dom'])
doms[id] = d
if id not in self.domain:
- config = None
- deferred = XendDomainInfo.vm_recreate(config, d)
+ savedinfo = None
+ deferred = XendDomainInfo.vm_recreate(savedinfo, d)
def fn(dominfo):
self._add_domain(dominfo.id, dominfo)
deferred.addCallback(fn)
# Remove entries for domains that no longer exist.
for d in self.domain.values():
- dominfo = doms.get(d.id)
- if dominfo:
- d.update(dominfo)
+ info = doms.get(d.id)
+ if info:
+ d.update(info)
else:
self._delete_domain(d.id)
self.reap_schedule(1)
+ def update_domain(self, id):
+ """Update the saved info for a domain.
+
+ @param id: domain id
+ """
+ dominfo = self.domain.get(id)
+ if dominfo:
+ self.domain_db[id] = dominfo.sxpr()
+ self.sync_domain(id)
+
def refresh_domain(self, id):
"""Refresh information for a single domain.
if not dominfo:
raise XendError("invalid domain:" + str(dom))
self.refresh_schedule()
- return dominfo.device_create(devconfig)
+ val = dominfo.device_create(devconfig)
+ self.update_domain(dominfo.id)
+ return val
def domain_device_destroy(self, dom, type, idx):
"""Destroy a device.
if not dominfo:
raise XendError("invalid domain:" + str(dom))
self.refresh_schedule()
- return dominfo.device_destroy(type, idx)
+ val = dominfo.device_destroy(type, idx)
+ self.update_domain(dominfo.id)
+ return val
def domain_devtype_ls(self, dom, type):
"""Get list of device indexes for a domain.
vm = XendDomainInfo()
return vm.construct(config)
-def vm_recreate(config, info):
+def vm_recreate(savedinfo, info):
"""Create the VM object for an existing domain.
+
+ @param savedinfo: saved info from the domain DB
+ @type savedinfo: sxpr
+ @param info: domain info from xc
+ @type info: xc domain dict
+ @return: deferred
"""
vm = XendDomainInfo()
vm.recreate = 1
vm.setdom(info['dom'])
vm.name = info['name']
vm.memory = info['mem_kb']/1024
+ start_time = sxp.child_value(savedinfo, 'start_time')
+ if start_time is not None:
+ vm.startTime = float(start_time)
+ config = sxp.child_value(savedinfo, 'config')
if config:
d = vm.construct(config)
else:
['id', self.id],
['name', self.name],
['memory', self.memory] ]
+
if self.info:
run = (self.info['running'] and 'r') or '-'
block = (self.info['blocked'] and 'b') or '-'
sxpr.append(['cpu', self.info['cpu']])
sxpr.append(['cpu_time', self.info['cpu_time']/1e9])
- if self.startTime:
- upTime = time.time() - self.startTime
- sxpr.append(['up_time', str( upTime ) ] )
- sxpr.append(['start_time', str( self.startTime ) ] )
+ if self.startTime:
+ upTime = time.time() - self.startTime
+ sxpr.append(['up_time', str(upTime) ])
+ sxpr.append(['start_time', str(self.startTime) ])
if self.console:
sxpr.append(self.console.sxpr())
if self.memory is None:
raise VmError('missing memory size')
- if sxp.child_value( config, 'start_time' ) != None:
- self.startTime = float( sxp.child_value( config, 'start_time' ) )
-
self.configure_console()
self.configure_restart()
self.configure_backends()
% (name, memory))
self.setdom(dom)
- if self.startTime == None:
+ if self.startTime is None:
self.startTime = time.time()
def build_domain(self, ostype, kernel, ramdisk, cmdline, vifs_n):